import com.gmongo.GMongo

import sender.EmailSender
import java.lang.reflect.Array;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.MultiPartEmail;
import com.db.Config;

def mongo = new GMongo(Config.dbip,Config.dbport)
def db = mongo.getDB(Config.dbname)
def _EmailSender=new EmailSender()
//每次发送的Email的封数，在配置文件中设定
def message =db.(Config.NEED_SEND_EMAIL_MESSAGE).find().limit(Config.SEND_LIMIT) 
//获取一个sender
def timelong=System.currentTimeMillis()
def nowUseTime=(timelong).intdiv(Config.SEND_FREQUENCY)
def sender =db.(Config.SENDER_EMAIL_MESSAGE).findOne([finallyUseTime:[$ne:nowUseTime],state:[$ne:0]])

//取消屏蔽中的Email,条件屏蔽的时间已经超过指定的时间（Config.SENDER_STOP_FREQUENCY），状态为0的所有发送者
db.(Config.SENDER_EMAIL_MESSAGE).update([state:0,stopTime:[$ne:System.currentTimeMillis().intdiv(Config.SENDER_STOP_FREQUENCY)]], [$set: [state:1]])

if(sender==null){
	println 'no sender <br/>'
}else{
	if(message.size()>0){
		println "获取到"<<message.size()<<"封邮件需要发送"
		println '--开始发送邮件--<br/>'
		//开始发送Email，将使用中的Email标记
		db.(Config.SENDER_EMAIL_MESSAGE).update([key: sender.key], [$set: [finallyUseTime:nowUseTime]])
		message.each{ 
			
			//发送Email
			try{
				_EmailSender.sendEmail(sender+it)
				db.(Config.SEND_OK_EMAIL_MESSAGE)<<it
				db.(Config.NEED_SEND_EMAIL_MESSAGE).remove(key:it.key)
			}catch (Exception e){
				println '--出现异常诊断为Email账户异常，屏蔽账户，结束发送请求。--<br/>'
				//出现异常诊断为Email账户异常
				//设置帐号的状态为0，并记录时间
				db.(Config.SENDER_EMAIL_MESSAGE).update([key: sender.key], [$set: [state:0,stopTime:System.currentTimeMillis().intdiv(Config.SENDER_STOP_FREQUENCY)]])
			}

		}
		//		println '--发送完毕--<br/>'
	}else{
		println "no message need send <br/>"
	}
}
println '--end--<br/>'


